<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 闭包的意义
        // 闭包函数得到存在 延长了外部局部变量的生存周期
        // 1. js如何知道闭包内部函数 用了哪些父函数的局部变量？
        // 不用知道 没有显示的引用任何一个父级变量 一直都在
        // 2. js 如何确定onclick 消失后要回收哪些变量?
        // 3. 父级的变量不回收 父级的父级?
        // 会一直沿着作用域链
        // let obj = {c:1};
        // function show(){
        //     let a = 12;
        //     let b = 5;
        //     document.onclick = function(){
        //         alert(evel(prompt("请随便输入一个表达式")));
        //     }
        // }
        // show();
        // setTimeout(()=>{
        //     document.onclick = null;
        //     obj = null; // 手动回收垃圾
        // },5000)
        // 计数器
        // js垃圾回收的原理 
        // js依靠引用技术机制 确定一个东西是否能够回收 
        let a = {name:'blue',age:18} //a应用了 json
        let b = a; //b 引用了 json json+1  2
        a = null; // a不再指向json  json -1 1
        b = null;
        // json 回收
        // 闭包 = 外部变量 + 函数
        function fn1(){
            let a = 12;
            function fn2(){
                let b = 5;
                document.onclick = function(){
                    
                }
            }
            fn2();
        }
        fn1()
    </script>
</body>
</html>